home *** CD-ROM | disk | FTP | other *** search
- /* Start from Workbench */
-
- #include <workbench/startup.h>
- #include <workbench/workbench.h>
-
- #define __NOLIBBASE__
- #include <proto/dos.h>
- #include <proto/exec.h>
- #include <proto/icon.h>
- #include "WBFlags.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #define MAXFILES 500
-
- #ifdef __GNUC__
- #define MYSTRCMP strcasecmp
- #define MYSTRNCMP strncasecmp
- #else
- #define MYSTRCMP strcmp
- #define MYSTRNCMP strncmp
- #endif
-
- struct Library *IconBase = NULL;
-
- extern struct WBArg *wb_arg;
- extern int NumPictures;
- extern BPTR olddir;
-
- /* Flags */
- extern short WBFiles;
-
- extern struct WBFlags WBFlags;
- extern struct WBFlags OldFlags;
-
-
- void ParseToolTypes(struct WBArg *wbarg, int initial);
-
- BPTR olddir;
-
- void FillWB(struct WBStartup *argmsg)
- {
- LONG ktr;
-
- /* open icon.library, will be closed by CloseDisplay() */
-
- if(!IconBase)
- {
- if(!(IconBase = OpenLibrary((UBYTE *)"icon.library",33)))
- {
- printf("Could not open icon.library V33 or higher.\n");
- return;
- }
- }
-
- wb_arg = argmsg->sm_ArgList;
-
- if(wb_arg->wa_Lock != 0)
- {
- olddir = CurrentDir(wb_arg->wa_Lock);
- }
-
- ParseToolTypes(wb_arg, 1);
-
- if(olddir)
- {
- CurrentDir(olddir);
- olddir=0;
- }
-
- if(argmsg->sm_NumArgs <= 1) return;
-
- WBFiles=1;
-
- NumPictures = argmsg->sm_NumArgs - 1;
-
- /* printf("NumPictures: %d\n", NumPictures); */
- wb_arg++;
- }
-
- void ParseToolTypes(struct WBArg *wbarg, int initial)
- {
- struct DiskObject *dobj;
- UBYTE **toolarray;
- char *s;
-
- /* initialize OldFlags even if tool type processing fails */
-
- if(initial) memcpy(&OldFlags, &WBFlags, sizeof(struct WBFlags));
-
- if(!IconBase)
- {
- if(!(IconBase = OpenLibrary((UBYTE *)"icon.library",33)))
- {
- printf("Could not open icon.library V33 or higher.\n");
- return;
- }
- }
-
- if(wbarg)
- if((*wbarg->wa_Name) && (dobj=GetDiskObject(wbarg->wa_Name)))
- {
- toolarray = (UBYTE **)dobj->do_ToolTypes;
-
- if(s=(char *)FindToolType(toolarray, "ARGS"))
- {
- int i=0;
- #ifndef __GNUC__
- strupr(s);
- #endif
- while(1)
- {
- while(s[i] != 0 && s[i] != '-') i++;
- if(s[i] == '-')
- {
- /* printf("Argument found.\n"); */
- if(!MYSTRNCMP(&s[i], "-GRAY", 5)) WBFlags.GrayEnable=1;
-
- else if(!MYSTRNCMP(&s[i], "-VGA", 4)) WBFlags.VGAenable=1;
-
- else if(!MYSTRNCMP(&s[i], "-SUPER72", 8)) WBFlags.SUPER72enable=1;
-
- else if(!MYSTRNCMP(&s[i], "-NOSMOOTH", 9)) WBFlags.NoSmooth=1;
-
- else if(!MYSTRNCMP(&s[i], "-FIT", 4)) WBFlags.ScaleFit=1;
-
- else if(!MYSTRNCMP(&s[i], "-DCT FAST", 9)) WBFlags.DCTFast=1;
-
- else if(!MYSTRNCMP(&s[i], "-DCT INT", 8)) WBFlags.DCTFast=0;
-
- else if(!MYSTRNCMP(&s[i], "-SCALE 1/1", 10)) WBFlags.scale=1;
-
- else if(!MYSTRNCMP(&s[i], "-SCALE 1/2", 10)) WBFlags.scale=2;
-
- else if(!MYSTRNCMP(&s[i], "-SCALE 1/4", 10)) WBFlags.scale=4;
-
- else if(!MYSTRNCMP(&s[i], "-SCALE 1/8", 10)) WBFlags.scale=8;
-
- else if(!MYSTRNCMP(&s[i], "-SMR", 4) && initial) WBFlags.SMRenable=1;
-
- else if(!MYSTRNCMP(&s[i], "-NOGRAY", 7) && !initial) WBFlags.GrayEnable=0;
-
- else if(!MYSTRNCMP(&s[i], "-NOVGA", 6) && !initial) WBFlags.VGAenable=0;
-
- else if(!MYSTRNCMP(&s[i], "-NOSUPER72", 10) && !initial) WBFlags.SUPER72enable=0;
-
- else if(!MYSTRNCMP(&s[i], "-SMOOTH", 7) && !initial) WBFlags.NoSmooth=0;
-
- else if(!MYSTRNCMP(&s[i], "-NOFIT", 6) && !initial) WBFlags.ScaleFit=0;
-
- else if(!MYSTRNCMP(&s[i], "-MAXMEM ", 8) && initial)
- {
- char ch = 'x';
- if (sscanf(&s[i+7], "%ld%c", &WBFlags.MaxMem, &ch) >= 1)
- {
- if (ch == 'm' || ch == 'M') WBFlags.MaxMem *= 1000L;
- WBFlags.MaxMemFlag = 1;
- }
- }
- i++;
- }
- else break;
- }
- if(initial) memcpy(&OldFlags, &WBFlags, sizeof(struct WBFlags));
- }
- FreeDiskObject(dobj);
- }
- }
-